package com.cj.mobile.iabp.mvp.contract;

import com.cj.mobile.iabp.mvp.model.entity.DictInfo;
import com.cj.mobile.iabp.mvp.model.entity.SurgeryInfo;
import com.cj.mobile.iabp.mvp.model.entity.SurgeryPage;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;

import java.util.List;

import io.reactivex.Observable;

/**
 * ================================================
 * Description:
 * <p>
 * Created by MVPArmsTemplate on 2025/09/24 15:36
 * <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
 * <a href="https://github.com/JessYanCoding">Follow me</a>
 * <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
 * <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
 * <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
 * ================================================
 */
public interface AddSurgeryInfoContract {
    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
    interface View extends IView {

        void showSurgeryInfo(String code, String name, SurgeryInfo info);

        void loadInstallPersonnel(List<DictInfo> list);

        void loadInstallAides(List<DictInfo> list);

        void loadBeforeCalculateResult(double value);

        void loadAfterCalculateResult(double value);

        void showLoadingSubmit();

        void hideLoadingSubmit();

        void showSurgeryNameOther(String replace);
    }

    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
    interface Model extends IModel {
        /**
         * 获取字典
         *
         * @param type 诊断type=1；手术type=2；医生type=3
         */
        Observable<List<DictInfo>> getDictList(String type);


        Observable<List<String>> upload(List<String> files);

        /**
         * 计算VIS
         *
         * @param bloodPasur 安装后血压
         * @param dba        多巴胺
         * @param ssx        肾上腺
         * @param qjssx      去甲肾上腺
         * @param mln        米力农药
         * @param dbf        多巴酚
         * @param sys        血管升压素
         * @param data       组合数据
         */
        Observable<Double> getVis(String bloodPasur, String dba, String ssx, String qjssx, String mln, String dbf, String sys, List<SurgeryPage> data);


        /**
         * 添加手术信息
         *
         * @param per         0代表预存，如果直接保存这个传1
         * @param patienId    患者id
         * @param doctorId    医生id
         * @param deptId      科室id
         * @param deptSec     院区id
         * @param regCode     注册代码
         * @param patientName 患者姓名
         * @param doctorName  医生姓名
         * @param data        提交数据
         */
        Observable<Integer> addSurgery(String per, String patienId, String doctorId, String deptId, String deptSec, String regCode, String patientName, String doctorName,
                                       List<SurgeryPage> data);

        /**
         * 修改手术信息
         *
         * @param per         0代表预存，如果直接保存这个传1
         * @param id          手术id
         * @param patienId    患者id
         * @param doctorId    医生id
         * @param deptId      科室id
         * @param deptSec     院区id
         * @param regCode     注册代码
         * @param patientName 患者姓名
         * @param doctorName  医生姓名
         * @param data        提交数据
         */
        Observable<Integer> updateSurgery(String per, String id, String patienId, String doctorId, String deptId, String deptSec, String regCode, String patientName, String doctorName,
                                          List<SurgeryPage> data);
    }
}